/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package muhnes.sizoo.filtros;

import java.io.IOException;
import javax.faces.application.FacesMessage;
import javax.faces.context.FacesContext;
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import org.hibernate.LazyInitializationException;
import org.hibernate.NonUniqueObjectException;
import org.hibernate.StaleObjectStateException;
import org.hibernate.exception.ConstraintViolationException;
import org.hibernate.exception.GenericJDBCException;

/**
 * Clase para el manejo de excepciones
 * @author Nelson Chicas
 */
public class ManejadorExcepcionesFilter implements Filter {
    
    @Override
    public void doFilter(ServletRequest request,
                         ServletResponse response,
                         FilterChain chain) {
        
        try {
            chain.doFilter(request, response);
        } 
        //
        catch (LazyInitializationException e) {
            mostrarNotificacion( 
                e.getMessage(), 
                e.toString() 
            );
        } 
        //
        catch (NonUniqueObjectException e) {
            mostrarNotificacion( 
                e.getMessage(), 
                e.toString() 
            );
        } 
        //
        catch (ConstraintViolationException e) {
            mostrarNotificacion( 
                e.getMessage(), 
                e.toString() 
            );
        } 
        //
        catch (GenericJDBCException e) {
            mostrarNotificacion( 
                e.getMessage(), 
                e.toString() 
            );
        } 
        //
        catch (StaleObjectStateException e) {
            mostrarNotificacion( 
                e.getMessage(), 
                e.toString() 
            );
        } 
        //
        catch (ServletException e) {
            mostrarNotificacion( 
                e.getMessage(), 
                e.toString() 
            );
        } 
        //
        catch (IOException e) {
            mostrarNotificacion( 
                e.getMessage(), 
                e.toString() 
            );
        } 
        
    }
 
    @Override
    public void init(FilterConfig filterConfig) throws ServletException {}
 
    @Override
    public void destroy() {}
    
    void mostrarNotificacion( String mensaje, String descripcion ) {
        FacesMessage error = new FacesMessage( mensaje, descripcion );
        FacesContext.getCurrentInstance().addMessage( ":growl", error );
        
    }
 
}
